CREATE OR REPLACE PACKAGE BODY EDIV2.Pack_?Categoria_Aduana_Cabotaje AS
/******************************************************************************
   NAME:       Pack_?Categoria_Aduana_Cabotaje
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        18/9/2013   Luis Antonio Lara Capetillo       Creacion del Paquete
******************************************************************************/

PROCEDURE  Aduana_CabotajeInsertarModificar(pniddocumento NUMBER, pnvid NUMBER, pnidbuque NUMBER, 
								pbandera VARCHAR2, ppuertoorigen NUMBER, ppuertodestino NUMBER, 
								pnidcliente NUMBER, pnidagenteaduanal NUMBER, pnidtipocarga NUMBER, 
								pdescripcioncarga VARCHAR2, pestadosolicitud NUMBER,  pTransaccion OUT NUMBER, pMensaje OUT VARCHAR2)
AS
vExisteRegistro NUMBER(1);
BEGIN
  SELECT count(*)
  INTO   vExisteRegistro
  FROM   Aduana_Cabotaje
  WHERE  nidDocumento=pNidDocumento;
  
  IF vExisteRegistro=0 THEN
    INSERT INTO Aduana_Cabotaje
	           (nid, niddocumento, nvid, 
				nidbuque, bandera, puertoorigen, 
				puertodestino, nidcliente, nidagenteaduanal, 
				nidtipocarga, descripcioncarga, estadosolicitud)
    VALUES     (seq_Aduana_Cabotaje.nextval, pniddocumento, pnvid, 
				pnidbuque, pbandera, ppuertoorigen, 
				ppuertodestino, pnidcliente, pnidagenteaduanal, 
				pnidtipocarga, pdescripcioncarga, pestadosolicitud);
  ELSE
    UPDATE Aduana_Cabotaje
    SET    niddocumento=pniddocumento, nvid=pnvid, 
			nidbuque=pnidbuque, bandera=pbandera, puertoorigen=ppuertoorigen, 
			puertodestino=ppuertodestino, nidcliente=pnidcliente, nidagenteaduanal=pnidagenteaduanal, 
			nidtipocarga=pnidtipocarga, descripcioncarga=pdescripcioncarga, estadosolicitud=pestadosolicitud
    WHERE  nidDocumento=pNidDocumento;
  END IF;
  
  COMMIT;
  pTransaccion := 1;
  pMensaje := 'Terminado OK';
  dbms_output.put_line('Terminado OK');

EXCEPTION
  WHEN OTHERS THEN
    pTransaccion := 0;
    pMensaje := 'Error en  Aduana_Cabotaje_InsertarModificar:' || SQLCODE || ' Mensaje: ' || sqlerrm;
    dbms_output.put_line('Error en  Aduana_Cabotaje_InsertarModificar:' || SQLCODE || ' Mensaje: ' || sqlerrm);
END;

PROCEDURE  Aduana_CabotajeConsultar(pNidDocumento NUMBER, pTransaccion OUT NUMBER, pCursor OUT cursor_type)
AS
BEGIN
  OPEN pCursor FOR
    SELECT nid, niddocumento, nvid, 
				nidbuque, bandera, puertoorigen, 
				puertodestino, nidcliente, nidagenteaduanal, 
				nidtipocarga, descripcioncarga, estadosolicitud
    FROM   Aduana_Cabotaje
    WHERE  nidDocumento=pNidDocumento;
    
  pTransaccion := 1;
EXCEPTION 
  WHEN OTHERS THEN
    pTransaccion := 0;
END;

PROCEDURE  Aduana_CabotajeDetalleXML(pNidDocumento NUMBER, pTransaccion OUT NUMBER, pEncabezado OUT cursor_type,
                           pDatos OUT cursor_type, pIncidencias OUT cursor_type)
AS
BEGIN
  OPEN pEncabezado FOR
    SELECT d.nid, d.codigo, d.fechacreacion,
           (us.nombre ||' '||us.apellidopat||' '||us.apellidomat) as nombre, d.nidusuario
    FROM   documento d, usuarios us
    WHERE  d.nid=pnidDocumento
    AND    d.nidusuario=us.nid;
    
  OPEN pDatos FOR
    SELECT nid, niddocumento, nvid, 
				nidbuque, bandera, puertoorigen, 
				puertodestino, nidcliente, nidagenteaduanal, 
				nidtipocarga, descripcioncarga, estadosolicitud
    FROM   Aduana_Cabotaje
    WHERE  nidDocumento=pNidDocumento;
    
  OPEN pIncidencias FOR
    SELECT i.fechaemision, i.descripcion, us.nombre
    FROM   incidencia i, usuarios us
    WHERE  niddocumento=pnidDocumento
    AND    i.nidusuario=us.nid;
    
    pTransaccion := 1;
    
EXCEPTION 
  WHEN OTHERS THEN
    pTransaccion := 0;
END;

--otros

END Pack_?Categoria_Aduana_Cabotaje;
